#include <cstdio>
#include <queue>
#include <set>
#include <cstring>
using namespace std;

struct Node {
    int n, s;
    Node(): n(0), s(0) {}
    Node(int n, int s): n(n), s(s) { }
};

int N, K;
bool vis[2000005];

int BFS() {
    queue<Node> q;
    q.push(Node(N, 0));
    vis[N] = true;
    while (!q.empty()) {
        Node n = q.front(); q.pop();
        //printf("%d,%d\n", n.n, n.s);
        if (n.n == K) {
            return n.s;
        }
        if (n.n*2 <= 2000000 && !vis[n.n*2]) {
            q.push(Node(n.n*2, n.s+1));
            vis[n.n*2] = true;
        }
        if (n.n-1 >= 0 && !vis[n.n-1]) {
            q.push(Node(n.n-1, n.s+1));
            vis[n.n-1] = true;
        }
        if (n.n+1 <= 2000000 && !vis[n.n+1]) {
            q.push(Node(n.n+1, n.s+1));
            vis[n.n+1] = true;
        }
    }
    return 0;
}

int main() {
    scanf("%d%d", &N, &K);
    printf("%d\n", BFS());
    return 0;
}
